﻿/******************************************
 * 
 * @author Рамиль Алиякберов a.k.a R@Me0
 * http://www.rame0.ru
 * 
 * License:
 * Read License.txt
 */


using System;
using System.Windows.Browser;
using System.Windows.Threading;
using System.Collections.Generic;
using System.Xml.Linq;

namespace VKontakte
{
    public partial class APIConnection
    {
        /*
         * TODO: Реализовать перечисленные методы
         */
        /// <summary>
        /// возвращает установил пользователь данное приложение или нет.
        /// В результате успешного выполнения, возвращает 1 в случае, 
        /// если пользователь установил у себя данное приложение, иначе 0
        /// 
        /// Функция делает запрос на сервер
        /// </summary>
        /// Подробнее тут: <http://vkontakte.ru/developers.php?o=-1&p=isAppUser
        /// <param name="uid">ID пользователя. По умолчанию ID текущего пользователя.</param>
        /// <param name="dispatcher">Поток окна приложения, вызвавшего метод</param>
        /// <param name="callBack">Колбэк функция вызываемая завершении запроса</param>
        public void IsAppUser(Int32 uid, Dispatcher dispatcher, ApiCallBackHandler<bool> callBack, ApiCallBackHandler<XDocument> errorCallBack = null)
        {
            DataProvider.AsyncApiResponse data = new DataProvider.AsyncApiResponse(IsAppUserHendler, dispatcher, callBack, errorCallBack);
            Dictionary<String, String> options = new Dictionary<string, string>();
            if (uid > 0)
            {
                options.Add("uid", uid.ToString());
            }
            dataProvider.Request("isAppUser", data, options);
        }

        /// <summary>
        /// возвращает расширенную информацию о пользователях.
        /// Возвращает информацию о пользователях в виде набора массива объектов, 
        /// каждый из которых может иметь поля uid, 
        /// first_name, last_name, nickname, sex, bdate (birthdate), 
        /// city, country, timezone, photo, photo_medium, photo_big, photo_rec. 
        /// Если в параметре fields было указано поле contacts, 
        /// то будут доступны также поля: home_phone, mobile_phone. 
        /// Если в параметре fields было указано поле education, 
        /// то будут доступны также поля: university, university_name, faculty, faculty_name, graduation. 
        /// Значения uid, first_name и last_name возвращаются всегда, вне зависимости от выбранных полей и их количества. 
        ///  
        /// </summary>
        /// Подробнее тут:
        /// http://vkontakte.ru/developers.php?o=-1&p=getProfiles
        /// <param name="uids">перечисленные через запятую ID пользователей (максимум 1000 штук).</param>
        /// <param name="domains">перечисленные через запятую адреса пользователей (используется вместо uids)</param>
        /// <param name="fields">перечисленные через запятую поля анкет, необходимые для получения. Доступные значения: uid, first_name, last_name, nickname, domain, sex, bdate (birthdate), city, country, timezone, photo, photo_medium, photo_big, has_mobile, rate, contacts, education.</param>
        /// <param name="name_case">падеж для склонения имени и фамилии пользователя. Возможные значения: именительный – nom, родительный – gen, дательный – dat, винительный – acc, творительный – ins, предложный – abl. По умолчанию nom</param>
        /// <param name="dispatcher">Поток окна приложения, вызвавшего метод</param>
        /// <param name="callBack">Колбэк функция вызываемая завершении запроса</param>
        public void GetProfiles(String uids, Dispatcher dispatcher, ApiCallBackHandler<List<Profile>> callBack, ApiCallBackHandler<XDocument> errorCallBack = null, String domains = "", String fields = "", String name_case = "")
        {
            DataProvider.AsyncApiResponse data = new DataProvider.AsyncApiResponse(GetProfilesHandler, dispatcher, callBack, errorCallBack);
            Dictionary<String, String> options = new Dictionary<String, String>();
            options.Add("uid", uids);
            options.Add("domains", domains);
            options.Add("fields", fields);
            options.Add("name_case", name_case);
            dataProvider.Request("getProfiles", data, options);
        }

        /// <summary>
        /// Возвращает баланс текущего пользователя на счету приложения в сотых долях голоса. 
        /// Отличается от метода secure.getBalance тем, что не требует безопасного соединения с сервером API
        /// </summary>
        /// <param name="dispatcher">Поток окна приложения, вызвавшего метод</param>
        /// <param name="callBack">Колбэк функция вызываемая завершении запроса</param>
        public void GetUserBalance(Dispatcher dispatcher, ApiCallBackHandler<decimal> callBack, ApiCallBackHandler<XDocument> errorCallBack = null)
        {
            DataProvider.AsyncApiResponse data = new DataProvider.AsyncApiResponse(GetUserBalanceHandler, dispatcher, callBack, errorCallBack);
            Dictionary<String, String> options = null;
            dataProvider.Request("getUserBalance", data, options);
        }
        /*public void getUserSettings(); // возвращает настройки приложения текущего пользователя.
        public void getGroups(); // возвращает список id групп, в которых состоит текущий пользователь.
        public void getGroupsFull(); // возвращает базовую информацию о группах, в которых состоит текущий пользователь.
        */
    }
}
